package negocio;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import dao.CampaniaDAO;
import dao.TraficoNumCortoDAO;
import entity.CampaniaBD;
import entity.CobroBD;
import entity.TraficoNumCortoBD;
import fachade.PrincipalFachade;

public class Pago extends Campania {

	public Pago(int codCampania, String descripcion, Date fechaAlta,
			Date fechaBaja, Empresa empresa, float revenueCarrier,
			float revenueCliente, List<Concepto> conceptos) {
		super(codCampania, descripcion, fechaAlta, fechaBaja, empresa, revenueCarrier,
				revenueCliente, conceptos);
	}

	
	public Pago() {	}
	
	
	public Pago(CampaniaBD c){
		this.codCampania=c.getId_campania();
		this.conceptos= new ArrayList<Concepto>();
		this.descripcion=c.getDescripcion();
		if(c.getEmpresa().getTipo_empresa()=="Cliente")
			this.empresa=new Cliente(c.getEmpresa());
		this.empresa=new Carrier(c.getEmpresa());
		this.fechaAlta=c.getFecha_alta();
		this.fechaBaja=c.getFecha_baja();
		this.revenueCarrier=c.getRevenue_carrier();
		this.revenueCliente=c.getRevenue_cliente();
	}
	

	@Override
	public List<ItemComprobante> getItemsAFacturar(Empresa e,int periodo, boolean incluirConceptosAdicionales) throws Exception {
		//para la empresa del tipo cliente, agregar el concepto fee = itemComprobante y catidad sms*precio = itemComprobante
		//par la empresa del tipo carrier cantidad sms*precio = itemComprobante
		Concepto conc= null;
		List<ItemComprobante> lista = new ArrayList<ItemComprobante>();
		TraficoNumCortoDAO d = new TraficoNumCortoDAO();
		
		if(e instanceof Cliente){
			ConceptoPorCampania conceptoPorCampania = PrincipalFachade.getInstance().getiComprobantesFachade().getConceptosPorCampania(this.getCodCampania());
			
			if(incluirConceptosAdicionales && conceptoPorCampania != null){
				for (Iterator iterator2 = conceptoPorCampania.getConceptosPorCampania().iterator(); iterator2.hasNext();) {
					ItemConceptoPorCampania itemCampania = (ItemConceptoPorCampania ) iterator2.next();
				
					ItemComprobante nuevoItemComprobante = new ItemComprobante();
					nuevoItemComprobante.setConcepto(itemCampania.getConcepto());
					//si el item es de tipo PAGO lo ponemos en negativo para que sea una factura de pago (MG PAGA)
					nuevoItemComprobante.setCantidad(itemCampania.getCantidad());
					nuevoItemComprobante.setPrecioUnitario(itemCampania.getPrecio());
					nuevoItemComprobante.setCampania(this);
					
					lista.add(nuevoItemComprobante);
				} 
			}
			List<TraficoNumCortoBD> listaBD=d.getTraficoAFacturarxCampania(this.getCodCampania(), periodo);
			List<TraficoNumCorto> trafico= PrincipalFachade.getInstance().bdToNegocio(listaBD);
			
			for(int i =0;i<trafico.size();i++){
				ItemComprobante itemTraf = new ItemComprobante(trafico.get(i).getConcepto(),trafico.get(i).getConcepto().getPrecio().getPrecio(),trafico.get(i).getCantidadTraficada(),"",trafico.get(i).getCampania());
				lista.add(itemTraf);
			}
			
		}else{// Es un Carrier
			List<TraficoNumCortoBD> listaBD=d.getTraficoAFacturarxCarrier(e.codigoEmpresa, this.codCampania ,periodo);
			List<TraficoNumCorto> trafico= PrincipalFachade.getInstance().bdToNegocio(listaBD);
			for(int i =0;trafico.size()>i;i++){
				// en este caso nosotros tenemos que pagarle al Carrier --> la cantidad que le pasamos es negativa
				int cantidadPagar = trafico.get(i).getCantidadTraficada();
				float precioAPagarCarrier = 0F;
				
				if(trafico.get(i).getCampania() instanceof Pago){
						//cantidadPagar = -cantidadPagar;
						//JDL: Aca no se tiene en cuenta el revenue, ya que le pagamos el 100% del costo del mensaje al carrier.
						//ORIGprecioAPagarCarrier = trafico.get(i).getCampania().getRevenueCarrier();
						precioAPagarCarrier = -(trafico.get(i).getConcepto().getPrecio().getPrecio())*(trafico.get(i).getCampania().getRevenueCarrier());
				}
				else //es de cobro
				
				precioAPagarCarrier = (trafico.get(i).getConcepto().getPrecio().getPrecio()*(1- trafico.get(i).getCampania().getRevenueCarrier()));
				ItemComprobante itemTraf = new ItemComprobante(trafico.get(i).getConcepto(),precioAPagarCarrier,cantidadPagar,"",trafico.get(i).getCampania());
				lista.add(itemTraf);
			}
		}
			
		// TODO Auto-generated method stub

		return lista;
	}




}
